package com.nb.algor;

import java.util.ArrayList;
import java.util.Arrays;

/**
 * 【大数相加】
 * String a="123"
 * String b="4567"
 * 1.两个数组逆序成数字数组(把一个字符减去字符‘0’可以得到这个字符的数字值)，把短的数组长度搞成长数组位数，0补充
 * 2.逆序后，循环相加，num = arrA[i]+arrB[i], num%10是个位，num/10是十位，
 * 定义一个resultArr，把相加的结果正序装入resultArr（最后结果应该逆序输出），
 * 3.找到不是0的下标，去掉resultArr后面的0，正序输出
 */
public class BigNumberSum {

    public static void main(String[] args) {

        //System.out.println('5'-'0');
        System.out.println(sum("888888888888889999999999999999999999999","111111111111111111111111111111111111"));
        System.out.println(Integer.MAX_VALUE);

    }
    public static String sum(String numStr1,String numStr2){
        if(numStr1 == null||numStr2==null||numStr1.length()==0||numStr2.length()==0){
            return "";
        }
        //两个数字转字符数组，
        char[] num1CharArray = numStr1.toCharArray();
        char[] num2CharArray = numStr2.toCharArray();
        //字符数组->数组数组并逆序
        int length = num1CharArray.length>num2CharArray.length?num1CharArray.length:num2CharArray.length;
        int[] num1Array = new int[length];
        int[] num2Array = new int[length];
        int[] resultArray = new int[length+1];
        for(int i=num1CharArray.length-1,j=0;i>=0;i--){
            num1Array[j++]= num1CharArray[i]-'0';
        }
        for(int i=num2CharArray.length-1,j=0;i>=0;i--){
            num2Array[j++]= num2CharArray[i]-'0';
        }
        //遍历两个倒叙的数字数组，相加，较短者如果没有数字用0补齐
        for(int i=0;i<length;i++){
            int sum = num1Array[i]+num2Array[i] + resultArray[i];
            //
            int curr = sum%10;
            int next = sum/10;
            resultArray[i]=curr;
            resultArray[i+1]=next;
        }
        int indexEnd = resultArray.length-1;
        for(int i=indexEnd;i>=0;i--){
            if(resultArray[i] !=0){
                indexEnd = i;
                break;
            }
        }
        //结果数组逆序
        StringBuilder sb = new StringBuilder();
        for(int i=indexEnd;i>=0;i--){
            int rsNum = resultArray[i];
            sb.append(rsNum);
        }
       // System.out.println("Int："+(Integer.parseInt(numStr1)+Integer.parseInt(numStr2)));
        return sb.toString();
    }

}
